/* DnD */
GtkListBoxRow *drag_highlighted_row;
+
+ int n_visible_rows;
};
struct _GtkListBoxRowPrivate
/* Children are visible if they are shown by the app (visible)
and not filtered out (child_visible) by the listbox */
static void
-update_row_is_visible (GtkListBoxRow *row)
+update_row_is_visible (GtkListBox *list_box, GtkListBoxRow *row)
{
- row->priv->visible = gtk_widget_get_visible (GTK_WIDGET (row)) && gtk_widget_get_child_visible (GTK_WIDGET (row));
+ GtkListBoxPrivate *priv = list_box->priv;
+ gboolean was_visible;
+
+ was_visible = row->priv->visible;
+
+ row->priv->visible =
+ gtk_widget_get_visible (GTK_WIDGET (row)) &&
+ gtk_widget_get_child_visible (GTK_WIDGET (row));
+
+ if (was_visible && !row->priv->visible)
+ priv->n_visible_rows--;
+ if (!was_visible && row->priv->visible)
+ priv->n_visible_rows++;
}
static gboolean
gtk_widget_set_child_visible (GTK_WIDGET (row), do_show);
- update_row_is_visible (row);
+ update_row_is_visible (list_box, row);
}
static void
static void
gtk_list_box_row_visibility_changed (GtkListBox *list_box, GtkListBoxRow *row)
{
- update_row_is_visible (row);
+ update_row_is_visible (list_box, row);
if (gtk_widget_get_visible (GTK_WIDGET (list_box)))
{
else
iter = g_sequence_append (priv->children, row);
+
row->priv->iter = iter;
gtk_widget_set_parent (GTK_WIDGET (row), GTK_WIDGET (list_box));
+ gtk_widget_set_child_visible (GTK_WIDGET (row), TRUE);
row->priv->visible = gtk_widget_get_visible (GTK_WIDGET (row));
+ if (row->priv->visible)
+ priv->n_visible_rows++;
gtk_list_box_apply_filter (list_box, row);
if (gtk_widget_get_visible (GTK_WIDGET (list_box)))
{
return;
}
+ if (row->priv->visible)
+ priv->n_visible_rows--;
+
if (row->priv->header != NULL)
{
g_hash_table_remove (priv->header_hash, row->priv->header);